<?php

require_once(FILE_DB_STATSTATISTIEKDATA);
require_once(FILE_DB_STATLAAG);
/*
  --- PROJECT COFELY 2012, STATISTIEKENRAPPORT DATABASEKLASSE --
  @author: Leander Molegraaf
  @category: statistieken
  @name DbStatStatistiek

  @uses DbStatStatistiekInterface.php (interface)
  @see DbStatWPI
  @see DbStatTBM
  @uses DbStatStatistiekData
  @uses DbStatLaag

  @version 2.0
  datum: 21-06-2012

  BESCHRIJVING:
  Deze klasse bevat een lijst van alle regioss
  WERKING:
  -- ROEP DEZE KLASSE NIET ZELF AAN! gebruik in plaats daarvan DbStatTBM.php of DbStatWPI.php.

  Deze klasse wordt aangeroepen zonder constructor waardes.

  gebruik de functie selectRegioLijst($maand, $jaar) om de lijst met regios te vullen, en de maand/jaar gegevens te prepareren).
  je kan daarna elke regio apart behandelen, en invullen, door met een for loop door de protected variabel $regioLijst heen te loepen.

  Je kan ook de functie  getSpecifiekeRegio($naam, $maand, $jaar) gebruiken om 1 specifieke regio te krijgen, deze wordt gereturned.
  de regioBedrijfLijst per regio wordt in beide gevallen ook al aangeroepen, dus die functie hoef je niet apart aan te roepen.

  OPMERKINGEN:
  - gebruik DbStatWPI of DbStatTBM.php, anders werkt het niet
  CHANGELOG:
  1.1:
  - filteren op PC/BU/AD toegevoegd

  2.0:
  - met de integratie van regios en regiobedrijven de functies vulprofitcenterLijst
  , getSpecifiekeProfitcenter en getProfitcenterLijst naar DbStatRegioBedrijf verplaatst
  en vervangen door getSpecifiekeRegio, getRegioLijst en vulRegioLijst
  - getProfitcenterLijstNamen verwijderd. dat was dubbel.
  - deze klasse heeft niets direct meer te maken met de profitcenters, daarom
  zijn deze allemaal vervangen door regio, behalve in de changelog
  - argumenten voor het filteren in de statistiekdata pagina gebruikt, waardor
  deze niet meer aangegeven hoeven te worden bij de andere functies.
  - in de for-loops de count() buiten de loop gezet voor betere performance

 */

class DbStatStatistiek extends DbStatStatistiekData {

    public $lagenLijst; //Array met DbStatRegio objecten

    /**
     * constructor
     * @param int $beginFilterPeriodeMaand de maand vanaf wanneer gefilterd moet worden
     * @param int $beginFilterPeriodeJaar de jaar vanaf wanneer gefilterd moet worden
     * @param int $eindFilterPeriodeMaand de maand tot wanneer gefilterd moet worden
     * @param int $eindFilterPeriodeJaar de jaar tot wanneer gefilterd moet worden
     * @since Version 1.0
     */

    public function __construct($beginFilterPeriodeMaand, $beginFilterPeriodeJaar, $eindFilterPeriodeMaand, $eindFilterPeriodeJaar) {
        parent::__construct();
        $this->setBeginFilterPeriodeMaand($beginFilterPeriodeMaand);
        $this->setBeginFilterPeriodeJaar($beginFilterPeriodeJaar);
        $this->setEindFilterPeriodeMaand($eindFilterPeriodeMaand);
        $this->setEindFilterPeriodeJaar($eindFilterPeriodeJaar);
        $this->vulLagenLijst(); //vult de regioLijst met DbStatRegio objecten.
    }

    public function getLagenLijst() {
        return $this->lagenLijst;
    }

    public function getLagenLijstNamen() {
        return $this->lagenLijst;
    }

    /**
     * pakt 1 specifieke regio uit de regiolijst op basis van de ingegeven naam
     * @param String $naam de naam van de regio die je wilt hebben
     * @uses DbStatregio.php
     * @return void
     */
    public function getSpecifiekelaag($naam) {
        $laag = $this->lagenLijst;

        $maxloop = count($laag);
        for ($nummer = 0; $nummer < $maxloop; $nummer++) {
            if ($laag[$nummer]->getNaam() == $naam) {
                return $laag[$nummer];
            }
        }
    }

    /**
     * vult de lagenLijst met DbStatLaag objecten, en geeft ze de benodigde gegevens mee.
     * @name vulLagenLijst
     * @uses DbStatLaag.php
     * @since Version 2.0
     * @return void
     */
    protected function vulLagenLijst() {

        $query = "SELECT DISTINCT id, beschrijving FROM laag";
        if (isset($_POST['advsort'])) {
            if ($_POST['advsort'] == 'laag') {
                $query .="WHERE beschrijving=" . $_POST['sortData'];
            }
        }

        if (!$this->dbQuery($query)) {
            echo(STAT_ERROR_REGIO_VULFOUT);
        }
        $lagenData = $this->dbFetchAll();

        $maxloop = count($lagenData);
        for ($loop = 0; $loop < $maxloop; $loop++) { //1 bedrijf
            $this->lagenLijst[$loop] = new DbStatLaag($this->beginFilterPeriodeMaand, $this->beginFilterPeriodeJaar, $this->eindFilterPeriodeMaand, $this->eindFilterPeriodeJaar, $lagenData[$loop]['id'], $lagenData[$loop]['beschrijving'], $this->getFormulierType());
        }
    }

    /**
     * returns een array met alle bedrijfsonderdelen
     * @name getLijstMetBedrijfsonderdelen
     * @uses DbStatLaag
     * @uses DbStatBedrijfsonderdeel
     * @return DbStatBedrijfsonderdeelArray $BO een array met alle bedrijfsonderdelen
     */
    public function getLijstMetBedrijfsonderdelen() {
        $BO = array();

        $maxloop = count($this->lagenLijst);
        for ($nummer = 0; $nummer < $maxloop; $nummer++) {

            $maxloop2 = count($this->lagenLijst[$nummer]->bedrijfsonderdeelLijst);
            for ($nummer2 = 0; $nummer2 < $maxloop2; $nummer2++) {
                $BO = array_merge($BO, $this->lagenLijst[$nummer]->bedrijfsonderdeelLijst);
            }
        }

        return $BO;
    }

    /**
     * returns 1 specifieke profitcenter
     * @name getSpecifiekeBedrijfsonderdeel
     * @param String $naam de naam van de gezochte profitcenter
     * @uses DbStatLaag
     * @uses DbStatBedrijfsonderdeel
     * @return DbStatBedrijfsonderdeel $BO het gezochte bedrijfsonderdeel
     */
    public function getSpecifiekeBedrijfsonderdeel($naam) {
        $maxloop = count($this->lagenLijst);
        for ($nummer = 0; $nummer < $maxloop; $nummer++) {

            $maxloop2 = count($this->lagenLijst[$nummer]->bedrijfsonderdeelLijst);
            for ($nummer2 = 0; $nummer2 < $maxloop2; $nummer2++) {

                if ($this->lagenLijst[$nummer]->bedrijfsonderdeelLijst[$nummer2]->getNaam() == $naam) {
                    return $this->lagenLijst[$nummer]->bedrijfsonderdeelLijst[$nummer2];
                }
            }
        }
        echo(STAT_ERROR_PERSOON_VULFOUT);
    }

}

?>